<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			// 函数内部自己调用自己,这个函数就是递归函数(递归里面必须加退出条件)
			var num = 1;

			function fn() {
				console.log('打印6句话');
				if (num == 6) {
					return; //递归里面必须加退出条件
				}
				num++;
				fn();
			}
			fn();

			// 1.利用递归求1~n的阶乘1 * 2 * 3 * ...n		
			function f(n) {
				if (n == 1) {
					return 1;
				}
				return n * f(n - 1);
			}
			console.log(f(5)); //120
			
			// 2.利用递归函数求斐波那契数列(兔子序列) 1、1、2、3、5、8、13、 21...
			// 用户输入一个数字n就可以求出这个数字对应的兔子序列值
			// 我们只需要知道用户输入的n的前面两项(n-1 n-2)就可以计算出n对应的序列值
			function fb(n) {
				if (n == 1 || n == 2) {
					return 1;
				}
				return fb(n - 1) + fb(n - 2);
			}
			console.log(fb(3)); //2
			console.log(fb(6)); //8
			
			// 3.用户输入id,返回数据对象
			var data = [{
				id: 1,
				name: 'h5',
				goods: [{
					id: 11,
					name: 'html',
					goods: [{
						id: 111,
						name: 'html1',
					}, {
						id: 112,
						name: 'html2',
					}]
				}, {
					id: 12,
					name: 'css'
				}]
			}, {
				id: 2,
				name: 'javascript'
			}];

			function getId(json, id) {
				// 利用forEach去遍历数组里面的每个对象
				var o = {};
				json.forEach(function(item) {
					if (item.id == id) {
						//console.log(item);
						o = item;
						return item;
						// 里面应该有goods这个数组且长度不能为0
					} else if (item.goods && item.goods.length > 0) {
						o = getId(item.goods, id);
					}
				});
				return o;
			}
			console.log(getId(data, 1));
			console.log(getId(data, 2));
			console.log(getId(data, 11));
			console.log(getId(data, 111));
		</script>
	</body>
</html>
